package com.example.backend.controller;

import com.example.backend.service.UserService;
import com.example.backend.util.JWTUtil;
import com.example.backend.util.Result;
import com.example.backend.util.ResultGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 用户信息相关控制器
 * @author 李月
 * @date 2022/4/13 21:22
 */
@RestController
@RequestMapping("/v1/users")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 用户注册
     * @param params 参数键值对，包括电话号码和密码
     * @return 根据结果返回不同信息
     */
    @PostMapping
    public Result register(@RequestBody Map<String, String> params){
        if(userService.register(params.get("phoneNumber"), params.get("password")) == 0){
            return ResultGenerator.genSuccessResult("注册成功", null);
        } else if(userService.register(params.get("phoneNumber"), params.get("password")) == 1){
            return ResultGenerator.genFailResult("手机号已被注册", null);
        } else{
            return ResultGenerator.genFailResult("密码不符合规则", null);
        }
    }

    /**
     * 用户登录
     * @param params 参数键值对，包括电话号码和密码
     * @return 登录成功返回token、userId和roleId，登录失败返回相应信息
     */
    @PutMapping
    public Result login(@RequestBody Map<String, String> params){
        if(userService.login(params.get("phoneNumber"), params.get("password")).equals("1")){
            return ResultGenerator.genFailResult("账号不存在", null);
        } else if(userService.login(params.get("phoneNumber"), params.get("password")).equals("2")){
            return ResultGenerator.genFailResult("密码错误", null);
        } else{
            Map<String, String> map = new HashMap<String, String>();
            String[] tokenId = userService.login(params.get("phoneNumber"), params.get("password")).split(";");
            String token = tokenId[0];
            Integer userId = Integer.valueOf(tokenId[1]);
            System.out.println(userId);
            Integer roleId = userService.getRoleId(userId);
            map.put("token", token);
            map.put("userId", String.valueOf(userId));
            map.put("roleId", String.valueOf(roleId));
            return ResultGenerator.genSuccessResult("登录成功", map);
        }
    }

    /**
     * 用户修改信息
     * @param params 参数键值对，包括昵称、性别、生日、学历、学校、职业
     * @return 根据修改结果返回不同信息
     */
    @PutMapping("/userId")
    public Result modify(@RequestBody Map<String, Object> params){
        if(userService.modify(params)){
            return ResultGenerator.genSuccessResult("修改信息成功", null);
        } else{
            return ResultGenerator.genFailResult("修改信息失败", null);
        }
    }

    /**
     * 用户查询个人信息
     * @param userId 用户id
     * @return 返回查询到的个人信息
     */
    @GetMapping("/{userId}")
    public Result getInformation(@PathVariable("userId") int userId){
        Map<String, String> map = userService.getInformation(userId);
        return ResultGenerator.genSuccessResult("用户信息查询成功", map);
    }
}
